/*
 * @Author: 梁青春
 * @Date: 2025-11-04 13:29:04
 * @LastEditTime: 2025-11-07 17:17:48
 * @LastEditors: 梁青春
 */
// 工具函数：费用项目相关计算与帮助函数
// 说明：从 WardAddForm.vue 中提取的计算逻辑，避免重复代码并提高可测试性

/**
 * 计算所选费用项目的总金额
 * @param {Array<{id:string|number,name:string,unitPrice?:number,price?:number,quantity?:number}>} items - 选择的费用项目
 * @returns {number} total - 总金额（数值，展示时可使用 toFixed(2)）
 */
export function calculateTotalAmount(items = []) {
  // 中文注释：支持两种字段名(unitPrice/price)，与现有 mock 数据保持兼容
  let total = 0
  for (const item of items) {
    const price = Number(item?.sellingPrice ?? item?.price ?? 0) || 0
    const quantity = Number(item?.quantity ?? 1) || 1
    total += price * quantity
  }
  return total
}

/**
 * 根据筛选结果判断是否全部选中
 * @param {Array} filtered - 当前过滤后的项目列表
 * @param {Array} selected - 已选项目列表
 */
export function isAllSelected(filtered = [], selected = []) {
  if (!filtered.length) return false
  const selectedIds = new Set(selected.map(s => s.id))
  return filtered.every(i => selectedIds.has(i.id))
}

/**
 * 根据筛选结果判断是否为不确定状态（部分选中）
 * @param {Array} filtered - 当前过滤后的项目列表
 * @param {Array} selected - 已选项目列表
 */
export function isIndeterminate(filtered = [], selected = []) {
  const selectedIds = new Set(selected.map(s => s.id))
  const count = filtered.filter(i => selectedIds.has(i.id)).length
  return count > 0 && count < filtered.length
}
